/**
 * 应用程序配置
 */
export const enum APP {
    // 应用程序占用端口
    SOCKET_PORT = 7004,
    HTTP_PORT = 7005,

    /** -- 房间设置 -- */
    // 房间被踢后，多长时间可以再次加入(单位：秒)
    KICK_LIMIT_SECONDS = 120,

    /** -- 验证码设置 -- */
    // 验证码有效时间（单位：分钟）
    CODE_VALID_TIME_MINUTES = 5,
    // 当天最大发送次数
    CODE_TODAY_MAX_SEND_COUNT = 5,

    // 文件上传的本地路径
    FILE_LOCAL_PATH = '/usr/local/socket-chess-file/uploadFiles/',
    // 文件上传时的域名
    FILE_SHOW_DOMAIN = 'https://www.aixt.vip/images',
    // 分享时的域名
    SHARE_DOMAIN = 'https://www.aixt.vip',
}

/**
 * 长捉的棋子类型
 */
export const enum KEEP_FIGHT_TYPE {
    // 多个子长捉
    MULTIPLE_CHESS = '0001',
    // 单个子长捉
    ONE_CHESS = '0002',
}

/**
 * 房间流水表类型
 */
export const enum ROOM_FLOW_TYPE {
    // 0001-被踢,
    KICK = '0001',
    // 0002-加锁
    LOCK = '0002',
}

/**
 * 对战相关配置
 */
export const enum BATTLE {
    // 匹配时最大分配的房间数量(单位：间)
    MAX_ROOM = 10,
    // 局时（单位：秒）
    TOTAL_TIME_SECONDS = 20 * 60,
    // 步时（单位：秒）
    STEP_TIME_SECONDS = 2 * 60,
    // 局时用尽后读秒（单位：秒）
    READ_SECONDS = 60,
    // 用户断线后超过此时将不再恢复会话（单位：秒）
    OFFLINE_TIME_SECONDS = 90,
    // 断开服务器并超过此时间后清除用户游离数据（单位：秒）
    DISCONNECT_TIME_SECONDS = 120,
    // 对局可悔棋的次数
    BACK_MOVE_COUNT = 5,
    // 部分操作发送请求的间隔时间，如：求和(单位：秒)
    REQUEST_INTERVAL_SECONDS = 60,
}

/**
 * 对战流水的类型
 */
export const enum BATTLE_FLOW_TYPE {
    PEACE = "0001",
    BACK_MOVE = "0002",
}

/**
 * Redis配置
 */
export const enum REDIS {
    HOST = 'localhost',
    PORT = 6379,
    DB_NAME = 0,
    PASSWORD = '123456',
}

/**
 * 数据库配置
 */
export const enum DATABASE {
    HOST = 'localhost',
    PORT = 3306,
    USER = 'user',
    PASSWORD = '123456',
    DB_NAME = 'd_five_chess',
}

/**
 * 棋盘
 */
export const enum BOARD {
    ROW_SIZE = 15,
    COL_SIZE = 15,
}

/**
 * 房间状态
 */
export const enum ROOM_STATUS {
    // 空房间
    EMPTY = 'EMPTY',
    // 有人在房间中等待(仅1个人)
    WAIT = 'WAIT',
    // 多个人在房间中等待
    MULTIPLE_WAIT = 'MULTIPLE_WAIT',
    // 匹配成功
    MATCH_SUCCESS = 'MATCH_SUCCESS',
    // 对战中
    BATTLE = 'BATTLE',
    // 对战有一方超时了
    TIMEOUT = 'TIMEOUT',
    // 对战结束，等待结算
    BATTLE_OVER = 'BATTLE_OVER',
}

/**
 * 加入房间的类型
 */
export const enum ROOM_JOIN_TYPE {
    // 匹配对战
    RANDOM = 'random',
    // 开房约战
    FREEDOM = 'freedom',
}

/**
 * 登录类型
 */
export const enum LOGIN_TYPE {
    // 账号密码登录(或邮箱)
    USER_PASS = '0001',
    // 凭证登录
    TICKET = '0002',
}

/**
 * 用户类型
 */
export const enum USER_TYPE {
    // 注册用户
    REGISTER_USER = '0001',
    // 游客
    TOURIST_USER = '0002',
}

/**
 * 用户角色
 */
export const enum USER_ROLE {
    // 对战角色
    BATTLE = 'ROLE_BATTLE',
    // 观战角色
    WATCH = 'ROLE_WATCH'
}

/**
 * 用户状态
 */
export const enum USER_STATUS {
    BATTLE = 'BATTLE',
    WATCH = 'WATCH',
}

/**
 * 游戏结束的类型
 */
export const enum GAME_OVER_TYPE {
    // 0001-绝杀，0002-认输，0003-逃跑,
    // 0004-超时, 0005-双方议和
    BATTLE = '0001',
    ADMIT_DEFEAT = '0002',
    USER_LEAVE = '0003',
    USER_TIMEOUT = '0004',
    USER_PEACE = '0005',
}

/**
 * 布尔值
 */
export const enum BOOLEAN {
    YES = 'YES',
    NO = 'NO',

    AGREE = 'agree',
    REJECT = 'reject',

    SHORT_YES = 'Y',
    SHORT_NO = 'N',
}

/**
 * 客户端平台枚举(与客户端保持一致)
 */
export const enum PAGE_STATUS {
    LOGIN = 'login',
    PLATFORM = 'platform',
    PLAYER_RANDOM = 'playerRandom',
    PLAYER_FREEDOM = 'playerFreedom',
    BOARD = 'board',
    WATCH = 'watch',
    REVIEW = 'review',
}

/**
 * 邮箱配置
 */
export const enum EMAIL_CONFIG {
    HOST = 'smtp.qq.com',
    PORT = 587,
    // 你的QQ账号
    USER = '12345678@qq.com',
    // 非你的QQ密码，为邮箱授权码
    // @see: https://blog.csdn.net/qq_20698983/article/details/83421020?spm=1001.2014.3001.5501
    PASSWORD = 'adkwfdahlfdafjdl',
}

/**
 * 验证码类型
 */
export const enum CODE_TYPE {
    // 忘记密码
    FORGET_PASSWORD = 'FORGET_PASSWORD',
    // 账号注册
    USER_REGISTER = 'USER_REGISTER',
}

/**
 * 实例key
 */
export const enum INS_KEY {
    SERVICE_KEY = 'serviceKey',
    JOB_KEY = "jobKey",
    // BATTLE_JOB_KEY = 'battleJobKey',
    // DISCONNECT_JOB_KEY = 'disconnectJobKey',
    // USER_OFFLINE_JOB_KEY = 'userOfflineJobKey',
    IO_KEY = 'ioKey',
    REDIS_KEY = 'redisKey',
}

/**
 * redis所有的key管理
 */
export const enum REDIS_KEYS {
    // 对战用户离线
    BATTLE_OFFLINE_KEY = 'BATTLE:OFFLINE:TIME',
    // 存储对战用户离线后，会将`BATTLE_OFFLINE_KEY`所产生的key
    BATTLE_OFFLINE_KEYS = "BATTLE:OFFLINE:KEYS",
}